package 其他.匹配字符串;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 题目
 * 给定一字符集合a 和 一字符串集合b；用集合a里的字符匹配集合b中的字符串，求成功匹配的字符串总长度；
 *
 * 其中 a匹配b中一个字符串时，a中字符不能重复使用；但在匹配下一个字符串时，可重复使用；
 *
 * 输入
 * 字符集合a : {‘1’,‘2’,‘3’,‘4’,‘4’}
 *
 * 字符串集合b：{‘123’,‘344’,‘112’,‘345’}
 *
 * 输出
 * 集合b中字符串中，能与a匹配的有 123 与 344；顾输出总长度 6
 *
 * 其中
 *
 * 112不匹配是因为集合a中只有1个’1’
 *
 * 345不匹配是因为集合a中没有 ‘5’
 *
 * 样例输入:
 * {‘1’,‘2’,‘3’,‘4’,‘4’}
 *
 * {‘123’,‘344’,‘112’,‘345’}
 *
 * 样例输出:
 * 6
 */
public class Main {
    public static void main(String[] args) {
        ArrayList<Character> characterArrayList = new ArrayList<>();
        ArrayList<String> stringArrayList = new ArrayList<>();
        characterArrayList.add('1');
        characterArrayList.add('2');
        characterArrayList.add('3');
        characterArrayList.add('4');
        characterArrayList.add('4');
        stringArrayList.add("123");
        stringArrayList.add("344");
        stringArrayList.add("112");
        stringArrayList.add("345");
        int total = match(stringArrayList, characterArrayList);
        System.out.println(total);
    }
    public static int match(List<String> stringList,List<Character> characterList){
        int total=0;
        //1.遍历字符串数组
        for (int i = 0; i < stringList.size(); i++) {
            ArrayList<Character> list = new ArrayList<>();
            //Collections.copy(list,characterList);  这个的前提是这两个集合的长度相同,
            list.addAll(characterList);   //  把一个集合添加到另一个集合中的方法.
            String s = stringList.get(i);
            int num=0;
            for (int j = 0; j < s.length(); j++) {
                // 如果不包含一次
                if (!list.contains(s.charAt(j))){
                    num=0;// 本次遍历长度置为0
                    break;
                }
                //如果包含
                list.remove((Character) s.charAt(j));    //  当这个 list 集合存储的是这个 字符的时候, 想要删除该字符,
                                                        // 如果直接填字符的话, 会被误以为是对应的索引, 所以需要使用 (Character) 进行一个强转
                num++;
            }
            total+=num;

        }

        return total;
    }
}
